<!DOCTYPE html>
<html lang="zh">
    <head>
    <!--
        © Material Theme
        https://github.com/viosey/hexo-theme-material
        Version: 1.3.4 -->

    <!-- Title -->
    
    <title>
        
            正则匹配一个数字(python实现) | 
        
        Terry Ding&#39;s Blog
    </title>

    <!-- Meta & Info -->
    <meta charset="utf-8">

    <!-- dns prefetch -->
    <meta http-equiv="x-dns-prefetch-control" content="on">
    
    
        <link rel="dns-prefetch" href="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"/>
    
    
    
    
        <link rel="dns-prefetch" href="https://www.google-analytics.com"/>
    
    

    <meta http-equiv="X-UA-Compatible">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="theme-color" content="#0097A7">
    <meta name="author" content="Terry Ding">
    <meta name="description" content="null">
    <meta name="keywords" content="null,python,正则">

    <!-- Favicons -->
    <link rel="icon shortcut" type="image/ico" href="/img/favicon.png">
    <link rel="icon" sizes="192x192" href="/img/favicon.png">
    <link rel="apple-touch-icon" href="/img/favicon.png">

    <!--iOS -->
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-title" content="Title">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="HandheldFriendly" content="True">
    <meta name="MobileOptimized" content="480">

    <!-- Add to homescreen for Chrome on Android -->
    <meta name="mobile-web-app-capable" content="yes">

    <!-- Add to homescreen for Safari on iOS -->
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="apple-mobile-web-app-title" content="Terry Ding&#39;s Blog">

    <!-- The Open Graph protocol -->
    <meta property="og:url" content="http://blog.dingtianyu.xyz">
    <meta property="og:type" content="blog">
    <meta property="og:title" content="正则匹配一个数字(python实现) | Terry Ding&#39;s Blog">
    <meta property="og:description" content="null">
    <meta property="og:article:tag" content="python"> <meta property="og:article:tag" content="正则"> 

    <!--[if lte IE 9]>
        <link rel="stylesheet" href="/css/ie-blocker.css">

        
            <script src="/js/ie-blocker.zhCN.js"></script>
        
    <![endif]-->

    <!-- Import CSS & jQuery -->
    
        <link rel="stylesheet" href="/css/material.min.css">
        <link rel="stylesheet" href="/css/style.min.css">
        <!-- Config CSS -->


<!-- Other Styles -->
<style>
  body, html {
    font-family: Roboto, "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
  }

  a {
    color: #00838F;
  }

  .mdl-card__media,
  #search-label,
  #search-form-label:after,
  #scheme-Paradox .hot_tags-count,
  #scheme-Paradox .sidebar_archives-count,
  #scheme-Paradox .sidebar-colored .sidebar-header,
  #scheme-Paradox .sidebar-colored .sidebar-badge{
    background-color: #0097A7 !important;
  }

  /* Sidebar User Drop Down Menu Text Color */
  #scheme-Paradox .sidebar-colored .sidebar-nav>.dropdown>.dropdown-menu>li>a:hover,
  #scheme-Paradox .sidebar-colored .sidebar-nav>.dropdown>.dropdown-menu>li>a:focus {
    color: #0097A7 !important;
  }

  #post_entry-right-info,
  .sidebar-colored .sidebar-nav li:hover > a,
  .sidebar-colored .sidebar-nav li:hover > a i,
  .sidebar-colored .sidebar-nav li > a:hover,
  .sidebar-colored .sidebar-nav li > a:hover i,
  .sidebar-colored .sidebar-nav li > a:focus i,
  .sidebar-colored .sidebar-nav > .open > a,
  .sidebar-colored .sidebar-nav > .open > a:hover,
  .sidebar-colored .sidebar-nav > .open > a:focus,
  #ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-head a {
    color: #0097A7 !important;
  }

  .toTop {
    background: #757575 !important;
  }

  .material-layout .material-post>.material-nav,
  .material-layout .material-index>.material-nav,
  .material-nav a {
    color: #757575;
  }

  #scheme-Paradox .MD-burger-layer {
    background-color: #757575;
  }

  #scheme-Paradox #post-toc-trigger-btn {
    color: #757575;
  }

  .post-toc a:hover {
    color: #00838F;
    text-decoration: underline;
  }

</style>


<!-- Theme Background Related-->

    <style>
      body{
        background-color: #F5F5F5;
      }

      /* blog_info bottom background */
      #scheme-Paradox .material-layout .something-else .mdl-card__supporting-text{
        background-color: #fff;
      }
    </style>




<!-- Fade Effect -->

    <style>
      .fade {
        transition: all 800ms linear;
        -webkit-transform: translate3d(0,0,0);
        -moz-transform: translate3d(0,0,0);
        -ms-transform: translate3d(0,0,0);
        -o-transform: translate3d(0,0,0);
        transform: translate3d(0,0,0);
        opacity: 1;
      }

      .fade.out{
        opacity: 0;
      }
    </style>


        <script src="/js/jquery.min.js"></script>
        <script src="/js/queue.js"></script>
    

    <!-- UC Browser Compatible -->
    <script>
        var agent = navigator.userAgent.toLowerCase();
        if(agent.indexOf('ucbrowser')>0) {
            document.write("<link rel=\"stylesheet\" href=\"/css/uc.css\">");
            alert('由于 UC 浏览器使用极旧的内核，而本网站使用了一些新的特性。\n为了您能更好的浏览，推荐使用 Chrome 或 Firefox 浏览器。');
        }
    </script>

    

    
    <!-- Google Analytics -->
    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
        ga('create', 'UA-93912232-1', 'auto');ga('send', 'pageview');
    </script>
    


    <!-- Bing Background -->
    

    <!-- Custom Head -->
    
</head>


    
        <body id="scheme-Paradox" class="lazy">
            <div class="material-layout  mdl-js-layout has-drawer is-upgraded">
                

                <!-- Main Container -->
                <main class="material-layout__content" id="main">

                    <!-- Top Anchor -->
                    <div id="top"></div>

                    
                        <!-- Hamburger Button -->
                        <button class="MD-burger-icon sidebar-toggle">
                            <span class="MD-burger-layer"></span>
                        </button>
                    

                    <!-- Post TOC -->

    
    <!-- Back Button -->
    <!--
    <div class="material-back" id="backhome-div" tabindex="0">
        <a class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon"
           href="#" onclick="window.history.back();return false;"
           target="_self"
           role="button"
           data-upgraded=",MaterialButton,MaterialRipple">
            <i class="material-icons" role="presentation">arrow_back</i>
            <span class="mdl-button__ripple-container">
                <span class="mdl-ripple"></span>
            </span>
        </a>
    </div>
    -->

    <!-- Left aligned menu below button -->
    <button id="post-toc-trigger-btn"
        class="mdl-button mdl-js-button mdl-button--icon">
        <i class="material-icons">format_list_numbered</i>
    </button>

    <ul class="post-toc-wrap mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect" for="post-toc-trigger-btn" style="max-height:80vh; overflow-y:scroll;">
        <ol class="post-toc"><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#问题描述"><span class="post-toc-number">1.</span> <span class="post-toc-text">问题描述</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#测试样例"><span class="post-toc-number">2.</span> <span class="post-toc-text">测试样例</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#思路"><span class="post-toc-number">3.</span> <span class="post-toc-text">思路</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#代码如下："><span class="post-toc-number">4.</span> <span class="post-toc-text">代码如下：</span></a></li></ol>

        <!--
        <li class="mdl-menu__item">
            Some Action
        </li>
        -->
    </ul>




<!-- Layouts -->

    <!-- Post Module -->
    <div class="material-post_container">

        <div class="material-post mdl-grid">
            <div class="mdl-card mdl-shadow--4dp mdl-cell mdl-cell--12-col">

                <!-- Post Header(Thumbnail & Title) -->
                
    <!-- Paradox Post Header -->
    
        
            <!-- Random Thumbnail -->
            <div class="post_thumbnail-random mdl-card__media mdl-color-text--grey-50">
            <script>
    var randomNum = Math.floor(Math.random() * 19 + 1);

    $('.post_thumbnail-random').attr('data-original', '/img/random/material-' + randomNum + '.png');
    $('.post_thumbnail-random').addClass('lazy');
</script>

        
    
            <p class="article-headline-p">
                正则匹配一个数字(python实现)
            </p>
        </div>





                
                    <!-- Paradox Post Info -->
                    <div class="mdl-color-text--grey-700 mdl-card__supporting-text meta">

    <!-- Author Avatar -->
    <div id="author-avatar">
        <img src="/img/avatar.png" width="44px" height="44px" alt="Author Avatar"/>
    </div>
    <!-- Author Name & Date -->
    <div>
        <strong>Terry Ding</strong>
        <span>4月 15, 2017</span>
    </div>

    <div class="section-spacer"></div>

    <!-- Favorite -->
    <!--
        <button id="article-functions-like-button" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon btn-like">
            <i class="material-icons" role="presentation">favorite</i>
            <span class="visuallyhidden">favorites</span>
        </button>
    -->

    <!-- Qrcode -->
    
        <button id="article-functions-qrcode-button" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon">
            <i class="material-icons" role="presentation">devices other</i>
            <span class="visuallyhidden">devices other</span>
        </button>
        <ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="article-functions-qrcode-button">
            <li class="mdl-menu__item">在其它设备中阅读本文章</li>
            <img src="">
        </ul>
    

    <!-- Tags (bookmark) -->
    
    <button id="article-functions-viewtags-button" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon">
        <i class="material-icons" role="presentation">bookmark</i>
        <span class="visuallyhidden">bookmark</span>
    </button>
    <ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="article-functions-viewtags-button">
        <li class="mdl-menu__item">
        <a class="post_tag-link" href="/tags/python/">python</a></li><li class="mdl-menu__item"><a class="post_tag-link" href="/tags/正则/">正则</a>
    </ul>
    

    <!-- Share -->
    <button id="article-fuctions-share-button" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon">
    <i class="material-icons" role="presentation">share</i>
    <span class="visuallyhidden">share</span>
</button>
<ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="article-fuctions-share-button">
    
    <!-- Leancloud Views -->
        <a class="post_share-link" href="#">
            <li class="mdl-menu__item">
                <span id="/2017/04/15/NumberRegexCheck/" class="leancloud-views_num" data-flag-title="正则匹配一个数字(python实现)">
     &nbsp;浏览量
</span>

            </li>
        </a>
    

    

    <!-- Share Weibo -->
    
        <a class="post_share-link" href="http://service.weibo.com/share/share.php?appkey=&title=正则匹配一个数字(python实现)&url=http://blog.dingtianyu.xyz//2017/04/15/NumberRegexCheck/index.html&pic=&searchPic=false&style=simple" target="_blank">
            <li class="mdl-menu__item">
                分享到微博
            </li>
        </a>
    

    <!-- Share Twitter -->
    
        <a class="post_share-link" href="https://twitter.com/intent/tweet?text=正则匹配一个数字(python实现)&url=http://blog.dingtianyu.xyz//2017/04/15/NumberRegexCheck/index.html&via=Terry Ding" target="_blank">
            <li class="mdl-menu__item">
                分享到 Twitter
            </li>
        </a>
    

    <!-- Share Facebook -->
    
        <a class="post_share-link" href="https://www.facebook.com/sharer/sharer.php?u=http://blog.dingtianyu.xyz//2017/04/15/NumberRegexCheck/index.html" target="_blank">
            <li class="mdl-menu__item">
                分享到 Facebook
            </li>
        </a>
    

    <!-- Share Google+ -->
    
        <a class="post_share-link" href="https://plus.google.com/share?url=http://blog.dingtianyu.xyz//2017/04/15/NumberRegexCheck/index.html" target="_blank">
            <li class="mdl-menu__item">
                分享到 Google+
            </li>
        </a>
    

    <!-- Share LinkedIn -->
    

    <!-- Share QQ -->
    

    <!-- Share Telegram -->
    
</ul>

</div>

                

                <!-- Post Content -->
                <div id="post-content" class="mdl-color-text--grey-700 mdl-card__supporting-text fade out">
    
        <h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>给定一组字符串，判断该字符串是否为一个合法的数字，要求如下</p>
<ol>
<li>基本整数数字是0-9的组合</li>
<li>整数不可有前导0 (如: 012就不合法)</li>
<li>小数包含(x.y, .y, x.)三种形式，此时x和y符合第1条且可以有前导0</li>
<li>无论整数或小数都可以选择在最前方加入+-之一或者不加，以表达该数字的正负</li>
<li>数字支持”x^y”的形式以表达x的y次方的意义，^不能作为一个数字的开头或结尾，同时x和y均为符合前4条条件的数字</li>
<li>数字支持”xey”的形式以表达x乘以10的y次方的意义，e不能作为一个数字的开头或结尾，同时x符合前4条条件，y符合条件1和4(即：允许前导0的整数)</li>
</ol>
<h2 id="测试样例"><a href="#测试样例" class="headerlink" title="测试样例"></a>测试样例</h2><ul>
<li>“+1.23” is True</li>
<li>“-1.23” is True</li>
<li>“1.23” is True</li>
<li>“.23” is True</li>
<li>“1.” is True</li>
<li>“0.” is True</li>
<li>“+123” is True</li>
<li>“-123” is True</li>
<li>“123” is True</li>
<li></li>
<li>“1.23e+123” is True</li>
<li>“1.23e-123” is True</li>
<li>“1.23e123” is True</li>
<li>“1.23e0123” is True</li>
<li></li>
<li>“1.23^+123” is True</li>
<li>“1.23^-123” is True</li>
<li>“1.23^123” is True</li>
<li></li>
<li>“1.23^+1.23” is True</li>
<li>“1.23^-1.23” is True</li>
<li>“1.23^1.23” is True</li>
<li>“1.23^.23” is True</li>
<li>“1.^1.” is True</li>
<li>“1.^0.” is True</li>
<li></li>
<li>“” is False</li>
<li>“a.” is False</li>
<li>“.” is False</li>
<li></li>
<li>“-1.2.3” is False</li>
<li>“-1.-2” is False</li>
<li>“0123” is False</li>
<li></li>
<li>“1.23e1.2” is False</li>
<li>“1.23e” is False</li>
<li>“1.23e1e2” is False</li>
<li>“1.23e1^2” is False</li>
<li></li>
<li>“1.23^1.2.3” is False</li>
<li>“1.23^” is False</li>
<li>“1.23^0123” is False</li>
<li>“1.23^1^2” is False</li>
<li>“1.23^1e2” is False</li>
</ul>
<h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>最开始的思路是先确定数字中是否包含e或者^符号，如果有，用其将数字切开，分别对前后进行判断，后来整理清楚要求后，发现可以用正则来进行匹配，正则的整体方案也基本等价于一开始的思路</p>
<ol>
<li>对于小数使用\d*.\d+ 来匹配x.y .y的形式， \d+. 来匹配x.的形式</li>
<li>对于整数使用[1-9]\d*来匹配无前导0的形式，\d+ 来匹配有前导0的形式</li>
<li>对以上的几种形式再与- + e ^ 等符号进行按要求的连接即可形成完整的正则</li>
</ol>
<h2 id="代码如下："><a href="#代码如下：" class="headerlink" title="代码如下："></a>代码如下：</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> re</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">numberCheck</span><span class="params">(numberStr)</span>:</span></div><div class="line">    numberRegex = re.compile(<span class="string">"[-+]?("</span></div><div class="line">                                    <span class="string">"(\d*\.\d+)|"</span>   <span class="comment"># match x.y .y format</span></div><div class="line">                                    <span class="string">"(\d+\.)|"</span>  <span class="comment"># match x. format</span></div><div class="line">                                    <span class="string">"([1-9]\d*)"</span>  <span class="comment"># match Integer format(without lead zero) </span></div><div class="line">                                    <span class="string">")"</span>  <span class="comment"># a simple number (both Integer and Double)</span></div><div class="line">                             <span class="string">"("</span></div><div class="line">                                 <span class="string">"(e[+-]?\d+)"</span>   <span class="comment"># if "e" in number, we need a Integer(can lead with zero) below </span></div><div class="line">                             <span class="string">"|"</span></div><div class="line">                                 <span class="string">"(\^[+-]?((\d*\.\d+)|(\d+\.)|([1-9]\d*)))"</span>  <span class="comment"># if "^" in number, we need a simple number below</span></div><div class="line">                             <span class="string">")?"</span></div><div class="line">                             )</div><div class="line">    <span class="keyword">return</span> numberRegex.fullmatch(numberStr) <span class="keyword">is</span> <span class="keyword">not</span> <span class="keyword">None</span></div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">testNumberCheck</span><span class="params">()</span>:</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"+1.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"-1.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">".23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1."</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"0."</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"+123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"-123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e+123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e-123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e0123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^+123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^-123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^123"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^+1.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^-1.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^1.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^.23"</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.^1."</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.^0."</span>) <span class="keyword">is</span> <span class="keyword">True</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">""</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"a."</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"."</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"-1.2.3"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"-1.-2"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"0123"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e1.2"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e1e2"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23e1^2"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line"></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^1.2.3"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^0123"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^1^2"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line">    <span class="keyword">assert</span> numberCheck(<span class="string">"1.23^1e2"</span>) <span class="keyword">is</span> <span class="keyword">False</span></div><div class="line"></div><div class="line"></div><div class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</div><div class="line">    testNumberCheck()</div></pre></td></tr></table></figure>

    

    
</div>


                

                <!-- Post Comments -->
                
                    







                
            </div>

            <!-- Post Prev & Next Nav -->
            <nav class="material-nav mdl-color-text--grey-50 mdl-cell mdl-cell--12-col">
    <!-- Prev Nav -->
    
        <a href="/2017/04/09/BigInteger/" id="post_nav-newer" class="prev-content">
            <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--white mdl-color-text--grey-900" role="presentation">
                <i class="material-icons">arrow_back</i>
            </button>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            新篇
        </a>
    

    <!-- Section Spacer -->
    <div class="section-spacer"></div>

    <!-- Next Nav -->
    
        <a href="/2017/04/18/DockerInstall/" id="post_nav-older" class="next-content">
            旧篇
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--white mdl-color-text--grey-900" role="presentation">
                <i class="material-icons">arrow_forward</i>
            </button>
        </a>
    
</nav>

        </div>
    </div>



                    
                        <!-- Overlay For Active Sidebar -->
<div class="sidebar-overlay"></div>

<!-- Material sidebar -->
<aside id="sidebar" class="sidebar sidebar-colored sidebar-fixed-left" role="navigation">
    <div id="sidebar-main">
        <!-- Sidebar Header -->
        <div class="sidebar-header header-cover" style="background-image: url(/img/sidebar_header.png);">
    <!-- Top bar -->
    <div class="top-bar"></div>

    <!-- Sidebar toggle button -->
    <button type="button" class="sidebar-toggle mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon" style="display: initial;" data-upgraded=",MaterialButton,MaterialRipple">
        <i class="material-icons">clear_all</i>
        <span class="mdl-button__ripple-container">
            <span class="mdl-ripple">
            </span>
        </span>
    </button>

    <!-- Sidebar Avatar -->
    <div class="sidebar-image">
        <img src="/img/avatar.png" alt="Terry Ding's avatar">
    </div>

    <!-- Sidebar Email -->
    <a data-toggle="dropdown" class="sidebar-brand" href="#settings-dropdown">
        terryding77@gmail.com
        <b class="caret"></b>
    </a>
</div>


        <!-- Sidebar Navigation  -->
        <ul class="nav sidebar-nav">
    <!-- User dropdown  -->
    <li class="dropdown">
        <ul id="settings-dropdown" class="dropdown-menu">
            
                <li>
                    <a href="#" target="_blank" title="Email Me">
                        
                            <i class="material-icons sidebar-material-icons sidebar-indent-left1pc-element">email</i>
                        
                        Email Me
                    </a>
                </li>
            
        </ul>
    </li>

    <!-- Homepage -->
    
        <li id="sidebar-first-li">
            <a href="/" target="_self">
                
                    <i class="material-icons sidebar-material-icons">home</i>
                
                主页
            </a>
        </li>
        
    

    <!-- Archives  -->
    
        <li class="dropdown">
            <a href="#" class="ripple-effect dropdown-toggle" data-toggle="dropdown">
                
                    <i class="material-icons sidebar-material-icons">inbox</i>
                
                    归档
                <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
            <li>
                <a class="sidebar_archives-link" href="/archives/2017/04/">四月 2017<span class="sidebar_archives-count">5</span></a>
            </ul>
        </li>
        
    

    <!-- Categories  -->
    
        <li class="dropdown">
            <a href="#" class="ripple-effect dropdown-toggle" data-toggle="dropdown">
                
                    <i class="material-icons sidebar-material-icons">chrome_reader_mode</i>
                
                分类
                <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
                <li>
                <a class="sidebar_archives-link" href="/categories/cpp/">cpp<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/cpp/大数运算/">大数运算<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/cpp/大数运算/快速幂/">快速幂<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/python/">python<span class="sidebar_archives-count">1</span></a></li><li><a class="sidebar_archives-link" href="/categories/python/正则/">正则<span class="sidebar_archives-count">1</span></a>
            </ul>
        </li>
        
    

    <!-- Pages  -->
    

    <!-- Article Number  -->
    
</ul>


        <!-- Sidebar Footer -->
        <!--
I'm glad you use this theme, the development is no so easy, I hope you can keep the copyright, I will thank you so much.
If you still want to delete the copyrights, could you still retain the first one? Which namely "Theme Material"
It will not impact the appearance and can give developers a lot of support :)

很高兴您使用并喜欢该主题，开发不易 十分谢谢与希望您可以保留一下版权声明。
如果您仍然想删除的话 能否只保留第一项呢？即 "Theme Material"
它不会影响美观并可以给开发者很大的支持和动力。 :)
-->

<!-- Sidebar Divider -->

    <div class="sidebar-divider"></div>


<!-- Theme Material -->

    <a href="https://github.com/viosey/hexo-theme-material"  class="sidebar-footer-text-a" target="_blank">
        <div class="sidebar-text mdl-button mdl-js-button mdl-js-ripple-effect sidebar-footer-text-div" data-upgraded=",MaterialButton,MaterialRipple">
            主题 - Material
            <span class="sidebar-badge badge-circle">i</span>
        </div>
    </a>


<!-- Help & Support -->
<!--

-->

<!-- Feedback -->
<!--

-->

<!-- About Theme -->
<!--

    <a href="https://blog.viosey.com/index.php/Material.html" target="_blank" class="sidebar-footer-text-a">
        <div class="sidebar-text mdl-button mdl-js-button mdl-js-ripple-effect sidebar-footer-text-div" data-upgraded=",MaterialButton,MaterialRipple">
             sidebar.about_theme
            <span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></div>
    </a>

-->

    </div>

    <!-- Sidebar Image -->
    

</aside>

                    

                    
                        <!-- Footer Top Button -->
                        <div class="toTop-wrap">
    <a href="#top" class="toTop">
        <i class="material-icons footer_top-i">expand_less</i>
    </a>
</div>

                    

                    <!--Footer-->
<footer class="mdl-mini-footer" id="bottom">
    
        <!-- Paradox Footer Left Section -->
        <div class="mdl-mini-footer--left-section sns-list">
    <!-- Twitter -->
    
        <a href="https://twitter.com/twitter" target="_blank">
            <button class="mdl-mini-footer--social-btn social-btn" style="background-image: url(/img/footer/footer_ico-twitter.svg);">
                <span class="visuallyhidden">Twitter</span>
            </button><!--
     --></a>
    

    <!-- Facebook -->
    
        <a href="https://www.facebook.com/facebook" target="_blank">
            <button class="mdl-mini-footer--social-btn social-btn" style="background-image: url(/img/footer/footer_ico-facebook.svg);">
                <span class="visuallyhidden">Facebook</span>
            </button><!--
     --></a>
    

    <!-- Google + -->
    
        <a href="https://www.google.com/" target="_blank">
            <button class="mdl-mini-footer--social-btn social-btn" style="background-image: url(/img/footer/footer_ico-gplus.svg);">
                <span class="visuallyhidden">Google Plus</span>
            </button><!--
     --></a>
    

    <!-- Weibo -->
    

    <!-- Instagram -->
    

    <!-- Tumblr -->
    

    <!-- Github -->
    
        <a href="https://github.com/terryding77" target="_blank">
            <button class="mdl-mini-footer--social-btn social-btn" style="background-image: url(/img/footer/footer_ico-github.svg);">
                <span class="visuallyhidden">Github</span>
            </button><!--
     --></a>
    

    <!-- LinkedIn -->
    

    <!-- Zhihu -->
    

    <!-- Bilibili -->
    

    <!-- Telegram -->
    
</div>


        <!--Copyright-->
        <div id="copyright">
            Copyright&nbsp;©&nbsp;
            <script type="text/javascript">
                var fd = new Date();
                document.write(fd.getFullYear());
            </script>
            &nbsp;Terry Ding's Blog
        </div>

        <!-- Paradox Footer Right Section -->

        <!--
        I am glad you use this theme, the development is no so easy, I hope you can keep the copyright.
        It will not impact the appearance and can give developers a lot of support :)

        很高兴您使用该主题，开发不易，希望您可以保留一下版权声明。
        它不会影响美观并可以给开发者很大的支持。 :)
        -->

        <div class="mdl-mini-footer--right-section">
            <div>
                <div class="footer-develop-div">Powered by <a href="https://hexo.io" target="_blank" class="footer-develop-a">Hexo</a></div>
                <div class="footer-develop-div">Theme - <a href="https://github.com/viosey/hexo-theme-material" target="_blank" class="footer-develop-a">Material</a></div>
            </div>
        </div>
    
</footer>


                    <!-- Import File -->

    <script src="/js/lazyload.min.js"></script>
    <script src="/js/js.min.js"></script>



    <script src="/js/nprogress.js"></script>


<script type="text/javascript">
    NProgress.configure({
        showSpinner: true
    });
    NProgress.start();
    $('#nprogress .bar').css({
        'background': '#29d'
    });
    $('#nprogress .peg').css({
        'box-shadow': '0 0 10px #29d, 0 0 15px #29d'
    });
    $('#nprogress .spinner-icon').css({
        'border-top-color': '#29d',
        'border-left-color': '#29d'
    });
    setTimeout(function() {
        NProgress.done();
        $('.fade').removeClass('out');
    }, 800);
</script>





    <!-- Leancloud -->
    <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script>
    <script>
        AV.initialize('gd4dvpF8B1gW7DnvMsKeYeMj-gzGzoHsz', 'CbToyIaOMs3ciCkNEbyCWpAq');
    </script>
    <script>
    function showTime(Counter) {
        var query = new AV.Query(Counter);
        $('.leancloud-views_num').each(function() {
            var url = $(this).attr('id').trim();
            query.equalTo('url', url);
            query.find({
                success: function(results) {
                    if (results.length === 0) {
                        var content = '0 ' + $(document.getElementById(url)).text();
                        $(document.getElementById(url)).text(content);
                        return;
                    }
                    for (var i = 0; i < results.length; i++) {
                        var object = results[i];
                        var content = object.get('time') + ' ' + $(document.getElementById(url)).text();
                        $(document.getElementById(url)).text(content);
                    }
                },
                error: function(object, error) {
                    console.log('Error: ' + error.code + ' ' + error.message);
                }
            });
        });
    }

    function addCount(Counter) {
      var Counter = AV.Object.extend('Counter');
      url = $('.leancloud-views_num').attr('id').trim();
      title = $('.leancloud-views_num').attr('data-flag-title').trim();
      var query = new AV.Query(Counter);
      query.equalTo('url', url);
      query.find({
          success: function(results) {
            if (results.length > 0) {
                var counter = results[0];
                counter.fetchWhenSave(true);
                counter.increment('time');
                counter.save(null, {
                    success: function(counter) {
                        var content =  counter.get('time') + ' ' + $(document.getElementById(url)).text();
                        $(document.getElementById(url)).text(content);
                    },
                    error: function(counter, error) {
                        console.log('Failed to save Visitor num, with error message: ' + error.message);
                    }
                });
            } else {
              var newcounter = new Counter();
              newcounter.set('title', title);
              newcounter.set('url', url);
              newcounter.set('time', 1);
              newcounter.save(null, {
                  success: function(newcounter) {
                      console.log('newcounter.get(\'time\')='+newcounter.get('time'));
                      var content = newcounter.get('time') + ' ' + $(document.getElementById(url)).text();
                      $(document.getElementById(url)).text(content);
                  },
                  error: function(newcounter, error) {
                      console.log('Failed to create');
                  }
              });
            }
        },
        error: function(error) {
            console.log('Error:' + error.code + ' ' + error.message);
        }
      });
    }
    $(function() {
        var Counter = AV.Object.extend('Counter');
        if ($('.leancloud-views_num').length === 1) {
            addCount(Counter);
        } else if ($('.post-title-link').length > 1) {
            showTime(Counter);
        }
    });
</script>













<!-- Window Load-->
<script>
    $(window).load(function() {
        // Post_Toc parent position fixed
        $('.post-toc-wrap').parent('.mdl-menu__container').css('position', 'fixed');
    });
</script>

<!-- MathJax Load-->

<script>
    <!-- Offer LazyLoad -->
    queue.offer(function(){
        $('.lazy').lazyload({
            effect : 'show'
        });
    });

    <!-- Start Queue -->
    $(document).ready(function(){
        setInterval(function(){
            queue.execNext();
        },200);
    });
</script>

                </main>
            </div>
        </body>
    
</html>
